/*
 * @Author: Leo.wang wanglizhigs@163.com
 * @Date: 2024-01-05 10:16:54
 * @LastEditors: Leo.wang wanglizhigs@163.com
 * @LastEditTime: 2024-01-05 10:22:11
 * @FilePath: /ruoyi-ui/src/utils/execute.js
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
/**
 * 防抖
 * 防抖函数确保在某个连续事件触发后的一段时间内只执行一次函数。如果在这段时间内再次触发事件，计时器会被重新启动，从而延迟函数的执行。
 * @author Wang LiZhi
 * @param func 执行的函数
 * @param delay {number} 多长时间内发生，只执行最后一次
 * */
export function debounce(func, delay=100) {
  let timer ;
  return function () {
    const context = this;
    const args = arguments;
    if (timer) clearTimeout(timer);
    timer = setTimeout(() => {
      func.apply(context, args);
    }, delay);
  };
}

/**
 * 节流
 * 节流函数确保在一段时间内，不论事件触发多少次，函数只会被执行一次。它会在固定的时间间隔内触发函数。
 * @author Wang LiZhi
 * @param func 要节流执行的函数
 * @param delay {number} 多长时间内执行一次
 * */
export function throttle(func, delay=100) {
  let lastTime = 0;
  return function () {
    const currentTime = new Date().getTime();
    if (currentTime - lastTime >= delay) {
      func.apply(this, arguments);
      lastTime = currentTime;
    }
  };
}
